#include"UdpServer.hpp"
#include"Log.hpp"
#include"InetAddr.hpp"
#include"ThreadPool.hpp"
#include"Route.hpp"
#include<memory>
#include <functional>
using namespace kzz;

using task_t =std::function< void () >;

int main(int argc,char **argv)
{
    if (argc != 2)
    {
        kzz::LOG(LogLevel::ERROR) << "服务器端参数传入错误";
        return 2;
    }
    //实现通信功能
    //kzz::ThreadPool<task_t> tp;
    kzz::ThreadPool<task_t>& tp=*kzz::ThreadPool<task_t> ::GetInstance();
    tp.Start();
    //实现
    kzz::Route r;

     uint16_t port=std::stoi(argv[1]);
  
     //服务器的function就是把收到的任务通过route的massageroute函数进行回调，
     //把这个回调的操作放入线程池中，让不同的线程去完成不同的回调
   
    std::unique_ptr<UdpServer> asver=std::make_unique<kzz::UdpServer>(port,
        [&r,&tp](int sockfd,const std::string& word,InetAddr& addr){
            task_t t=[&r,&sockfd,&word,&addr](){r.MassageRoute(sockfd,word,addr);};
            tp.Equeue(t);
        });
asver->Init();
asver->Start();

        sleep(10000);

   tp.Stop();
   tp.Join();
    // server.Init();
    
    // server.Start();
    return 0;

}